namespace Digitalmes.Infrastructure.IO;

/// <summary>
/// Excel 导出接口。
/// </summary>
public interface IExcelExport
{
    /// <summary>
    /// 导出数据。
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="path">导出的文件路径。</param>
    /// <param name="data">要导出的数据集合。支持集合合 匿名类型 和 强类型，也支持 <see cref="IEnumerable{IDictionary{string, object}}"/> 。</param>
    /// <param name="options">导出选项</param>
    void SaveAs<T>(string path, IEnumerable<T> data, ExcelExportOptions? options = null);

    /// <summary>
    /// 导出数据。
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="path">导出的文件路径。</param>
    /// <param name="data">要导出的数据集合。支持集合合 匿名类型 和 强类型，也支持 <see cref="IEnumerable{IDictionary{string, object}}"/> 。</param>
    /// <param name="options">导出选项</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task SaveAsAsync<T>(string path, IEnumerable<T> data, ExcelExportOptions? options = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 导出数据。
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="data">要导出的数据集合。支持集合合 匿名类型 和 强类型，也支持 <see cref="IEnumerable{IDictionary{string, object}}"/> 。</param>
    /// <param name="options">导出选项</param>
    /// <returns></returns>
    Stream SaveAsStream<T>(IEnumerable<T> data, ExcelExportOptions? options = null);

    /// <summary>
    /// 导出数据。
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="data">要导出的数据集合。支持集合合 匿名类型 和 强类型，也支持 <see cref="IEnumerable{IDictionary{string, object}}"/> 。</param>
    /// <param name="options">导出选项</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<Stream> SaveAsStreamAsync<T>(IEnumerable<T> data, ExcelExportOptions? options = null, CancellationToken cancellationToken = default);
}
